#pragma once

#include <memory>
#include "rtda/frame.h"
#include "instructions/base/instructions.h"

namespace jvm {
namespace instructions {

// Store reference into local variable
class ASTORE : public Index8Instruction {
public:
    void execute(std::shared_ptr<rtda::Frame> frame) override;
};

class ASTORE_0 : public NoOperandsInstruction {
public:
    void execute(std::shared_ptr<rtda::Frame> frame) override;
};

class ASTORE_1 : public NoOperandsInstruction {
public:
    void execute(std::shared_ptr<rtda::Frame> frame) override;
};

class ASTORE_2 : public NoOperandsInstruction {
public:
    void execute(std::shared_ptr<rtda::Frame> frame) override;
};

class ASTORE_3 : public NoOperandsInstruction {
public:
    void execute(std::shared_ptr<rtda::Frame> frame) override;
};

} // namespace instructions
} // namespace jvm